package cn.yanxiaohui.service.web.marco;

import java.io.IOException;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import cn.yanxiaohui.common.exception.APIException;
import cn.yanxiaohui.common.util.FreemarkerUtils;
import cn.yanxiaohui.data.entity.BookMark;
import cn.yanxiaohui.service.web.service.BookMarkService;
import freemarker.core.Environment;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateDirectiveModel;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;
import freemarker.template.WrappingTemplateModel;

/**
 * 根据书签ID获取书签详情
 * @author yanxh
 *
 */
@Repository
public class BookMarkDetailMarco implements TemplateDirectiveModel{
	
	@Autowired
	private BookMarkService bookMarkService;
	
	/**
	* @param env 系统环境变量，通常用它来输出相关内容，如Writer out = env.getOut();
	* @param map 自定义标签传过来的对象，其key=自定义标签的参数名，value值是TemplateModel类型，而TemplateModel是一个接口类型，通常我们都使用TemplateScalarModel接口来替代它获取一个String 值，如TemplateScalarModel.getAsString();当然还有其它常用的替代接口，如TemplateNumberModel获取number，TemplateHashModel等
	* @param loopVars 循环替代变量
	* @param body 用于处理自定义标签中的内容;当标签是<@myDirective />格式时，body=null
	*/
	@Override
	public void execute(Environment env, Map map, TemplateModel[] loopVars,
			TemplateDirectiveBody body) throws TemplateException, IOException {
		
		/**
		 * 书签ID
		 */
		Long bookMarkId = FreemarkerUtils.getLong(map, "bookMarkId");
		
		
		/**
		 * 获取书签信息
		 */
		BookMark bookMark = null;
		try {
			bookMark = bookMarkService.getBookMarkDetailById(bookMarkId);
		} catch (APIException e) {
			e.printStackTrace();
		}
		
		loopVars[0]=WrappingTemplateModel.getDefaultObjectWrapper().wrap(bookMark);
		body.render(env.getOut()); 
	}

}
